﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace BanVeXemPhim_Presentation
{
    public partial class UserControlAdminXepLichChieu : UserControl
    {
        public UserControlAdminXepLichChieu()
        {
            InitializeComponent();
        }
        private LichChieuTuanDTO[] _dsLichTuan;
        private PhimDTO[] _dsPhim;
        private RapChieuDTO[] _dsRapChieu;
        private LichChieuTuanDTO _LichTuanHienTai;
        private XuatChieuDTO[] _dsXuatChieu;

        public LichChieuTuanDTO[] DsLichTuan
        {
            get { return _dsLichTuan; }
            set
            {
                _dsLichTuan = value;
                if(_dsLichTuan!=null)
                {
                    if(_dsLichTuan.Length>0)
                    {
                        this.comboBoxNgayBatDau.Items.Clear();
                        for(int i=0;i<_dsLichTuan.Length;i++)
                        {
                            this.comboBoxNgayBatDau.Items.Add(_dsLichTuan[i].NgayBatDau.ToShortDateString());
                        }
                    }
                }
            }
        }

        public PhimDTO[] DsPhim
        {
            get { return _dsPhim; }
            set
            {
                _dsPhim = value;
                if(_dsPhim!=null)
                {
                    if(_dsPhim.Length>0)
                    {
                        for(int i=0;i<_dsPhim.Length;i++)
                        {
                            this.comboBoxDanhSachPhim.Items.Add(_dsPhim[i].TenPhim);
                        }
                    }   
                }

            }
        }

        public RapChieuDTO[] DsRapChieu
        {
            get { return _dsRapChieu; }
            set
            {
                _dsRapChieu = value;
                if(_dsRapChieu!=null)
                {
                    if(_dsRapChieu.Length>0)
                    {
                        for(int i=0;i<_dsRapChieu.Length;i++)
                        {
                            this.comboBoxDanhSachRapChieu.Items.Add(_dsRapChieu[i].TenRap);
                        }
                    }
                }
            }
        }
        public XuatChieuDTO[] DsXuatChieu
        {
            get { return _dsXuatChieu; }
            set
            {
                _dsXuatChieu = value;
                if(_dsXuatChieu!=null)
                {
                    if(_dsXuatChieu.Length>0)
                    {
                        this.dataGridViewDanhSachPhim.DataSource = _dsXuatChieu;
                        this.dataGridViewDanhSachPhim.Columns["IdXuatChieu"].Visible = false;
                        this.dataGridViewDanhSachPhim.Columns["IdTuan"].Visible = false;
                        this.dataGridViewDanhSachPhim.Columns["GioChieu"].Visible = false;
                        this.dataGridViewDanhSachPhim.Columns["Phim"].Visible = false;
                        this.dataGridViewDanhSachPhim.Visible = true;
                    }
                    else
                    {
                        this.dataGridViewDanhSachPhim.Visible = false;
                    }
                }
                else
                {
                    this.dataGridViewDanhSachPhim.Visible = false;
                }
                
            }
        }
        private void UserControlAdminXepLichChieu_Load(object sender, EventArgs e)
        {
            //Load danh sách lịch chiếu tuần (10 lịch chiếu tuần gần nhất)
            _LichTuanHienTai=new LichChieuTuanDTO();
            LichChieuTuanControl lichChieuTuanControl=new LichChieuTuanControl();
            DsLichTuan = lichChieuTuanControl.DanhSach10LichChieuGanNhat();
        }

        public void HienThiThongTinLichChieu(LichChieuTuanDTO lichChieuTuanDto)
        {
            this.dateTimePickerNgayBatDau.Value = lichChieuTuanDto.NgayBatDau;
            this.dateTimePickerNgayKetThuc.Value = lichChieuTuanDto.NgayKetThuc;
        }

        private void comboBoxNgayBatDau_SelectedIndexChanged(object sender, EventArgs e)
        {
            int index = this.comboBoxNgayBatDau.SelectedIndex;
            if(index>=0)
            {
                _LichTuanHienTai = DsLichTuan[index];
                HienThiThongTinLichChieu(_LichTuanHienTai);
                CapNhatDsXuatChieuTheoTuan(_LichTuanHienTai);
            }
        }
        //ThÊm lịch chiếu tuần
        private void buttonThemLichTuan_Click(object sender, EventArgs e)
        {
            LichChieuTuanDTO lichChieuTuanDto=new LichChieuTuanDTO();
            LayThongTinLichChieu(ref lichChieuTuanDto);
            LichChieuTuanControl control=new LichChieuTuanControl();
            if(KiemTraTruocKhiThem(lichChieuTuanDto))
            {
                control.ThemLichChieuTuan(lichChieuTuanDto);
                MessageBox.Show("Thêm lịch chiếu tuần thành công");
                CapNhatDanhSachLichChieuTuan();
                this.comboBoxNgayBatDau.SelectedIndex = 0;
                this.dataGridViewDanhSachPhim.Visible = false;
            }
        }

        public void CapNhatDanhSachLichChieuTuan()
        {
            LichChieuTuanControl control=new LichChieuTuanControl();
            this.DsLichTuan = control.DanhSach10LichChieuGanNhat();
        }

        public bool KiemTraTruocKhiThem(LichChieuTuanDTO lichChieuTuanDto)
        {
            if(DateTime.Compare(lichChieuTuanDto.NgayBatDau, lichChieuTuanDto.NgayKetThuc)>=0)
            {
                MessageBox.Show("Ngày chưa hợp lệ! ");
                return false;
            }
            LichChieuTuanControl control=new LichChieuTuanControl();
            if(!control.KiemTraTruocKhiThem(lichChieuTuanDto))
            {
                MessageBox.Show("Lịch chiếu mới không hợp lý, có thể do bị trùng ngày với lịch trước !");
                return false;
            }
            return true;
        }
        public void LayThongTinLichChieu(ref LichChieuTuanDTO lichChieuTuanDto)
        {
            lichChieuTuanDto.NgayBatDau = Convert.ToDateTime(this.dateTimePickerNgayBatDau.Value.ToShortDateString());
            lichChieuTuanDto.NgayKetThuc =Convert.ToDateTime(this.dateTimePickerNgayKetThuc.Value.ToShortDateString());
            lichChieuTuanDto.IdTuan = _LichTuanHienTai.IdTuan;
        }



        public void LayThongTinXuatChieu(ref XuatChieuDTO xuatChieuDto)
        {
            xuatChieuDto.NgayChieu =Convert.ToDateTime(this.dateTimePickerNgayChieu.Value.ToShortDateString());
            xuatChieuDto.GioChieu =Convert.ToDateTime(this.dateTimePickerGioChieu.Value.ToShortTimeString());
            xuatChieuDto.IdTuan = _LichTuanHienTai.IdTuan;
            if (this.textBoxGiamGia.Text != "")
                xuatChieuDto.PhanTramGiamGia = Convert.ToInt32(this.textBoxGiamGia.Text.ToString());
            else
                xuatChieuDto.PhanTramGiamGia = 0;

            if(this.comboBoxDanhSachPhim.SelectedIndex>=0)
            {
                xuatChieuDto.Phim =DsPhim[this.comboBoxDanhSachPhim.SelectedIndex].IdPhim;
            }
            else
            {
                xuatChieuDto.Phim = -1;
            }

            if (this.comboBoxDanhSachRapChieu.SelectedIndex >= 0)
            {
                xuatChieuDto.RapChieu = DsRapChieu[this.comboBoxDanhSachRapChieu.SelectedIndex].IdRapChieu;
            }
            else
                xuatChieuDto.RapChieu = -1;
        }


        //Thêm xuất chiếu tương ứng với tuần hiện hành.
        private void buttonThemXuatChieu_Click(object sender, EventArgs e)
        {
            if(this.comboBoxNgayBatDau.SelectedIndex>=0)
            {
                XuatChieuDTO xuatChieuDto=new XuatChieuDTO();
                LayThongTinXuatChieu(ref xuatChieuDto);
                if(DieuKienTruocKhiThemXuatChieu(xuatChieuDto))
                {
                    XuatChieuControl xuatChieuControl = new XuatChieuControl();
                    xuatChieuControl.ThemXuatChieu(xuatChieuDto);
                    CapNhatDsXuatChieuTheoTuan(_LichTuanHienTai);
                    MessageBox.Show("Thêm thành công !");
                }

            }
            else
            {
                MessageBox.Show("Chưa có tuần chiếu được chọn !");
            }
        }

        public bool DieuKienTruocKhiThemXuatChieu(XuatChieuDTO xuatChieuDto)
        {
            DateTime DStart =Convert.ToDateTime(_LichTuanHienTai.NgayBatDau.ToShortDateString());
            DateTime DEnd=Convert.ToDateTime(_LichTuanHienTai.NgayKetThuc.ToShortDateString());
            if(DateTime.Compare(xuatChieuDto.NgayChieu,DStart)< 0  || DateTime.Compare(xuatChieuDto.NgayChieu,DEnd)>0)
            {
                MessageBox.Show("Ngày chiếu không hợp lệ, Ngày chiếu phải nằm phạm vi của tuần !");
                return false;
            }
            if(xuatChieuDto.Phim==-1)
            {
                MessageBox.Show("Bạn chưa chọn phim !");
                return false;
            }
            if(xuatChieuDto.RapChieu==-1)
            {
                MessageBox.Show("Bạn chưa chọn rạp chiếu !!");
                return false;
            }
            return true;
        }
        public void CapNhatDsXuatChieuTheoTuan(LichChieuTuanDTO lichChieuTuanDto)
        {
            XuatChieuControl xuatChieuControl = new XuatChieuControl();
            DsXuatChieu = xuatChieuControl.DanhSachXuatChieuTheoTuan(lichChieuTuanDto);
        }



        private void dataGridViewDanhSachPhim_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            int index = this.dataGridViewDanhSachPhim.CurrentRow.Index;
            if(index>=0)
            {
                CapNhatManHinhChiTietXuatChieu(_dsXuatChieu[index]);
            }
        }

        public void CapNhatManHinhChiTietXuatChieu(XuatChieuDTO xuatChieuDto)
        {
            this.textBoxGiamGia.Text = xuatChieuDto.PhanTramGiamGia.ToString();
            this.dateTimePickerNgayChieu.Value = xuatChieuDto.NgayChieu;
            this.dateTimePickerGioChieu.Value = xuatChieuDto.GioChieu;
            this.comboBoxDanhSachPhim.Text = TenPhim(xuatChieuDto.Phim);
            this.comboBoxDanhSachRapChieu.Text = TenRap(xuatChieuDto.RapChieu);
        }
        public string TenPhim(int idPhim)
        {
            for(int i=0;i<_dsPhim.Length;i++)
            {
                if(_dsPhim[i].IdPhim==idPhim)
                {
                    return _dsPhim[i].TenPhim;
                }
            }
            return "";
        }
        public string TenRap(int idRap)
        {
            for (int i = 0; i < _dsRapChieu.Length; i++)
            {
                if (_dsPhim[i].IdPhim == idRap)
                {
                    return _dsRapChieu[i].TenRap;
                }
            }
            return "";
        }


        private void buttonXoaXuatChieu_Click(object sender, EventArgs e)
        {
            if(this.dataGridViewDanhSachPhim.CurrentRow!=null)
            {
                int index = this.dataGridViewDanhSachPhim.CurrentRow.Index;
                XuatChieuControl control = new XuatChieuControl();
                control.HuyXuatChieu(DsXuatChieu[index]);
                CapNhatDsXuatChieuTheoTuan(_LichTuanHienTai);
                MessageBox.Show("Huỷ xuất chiếu thành công !!");
                this.textBoxGiamGia.Text = "";
                this.comboBoxDanhSachPhim.Text = "";
                this.comboBoxDanhSachRapChieu.Text = "";
            }
        }
        //Xoá lịch chiếu.
        private void buttonXoa_Click(object sender, EventArgs e)
        {
            if(this.comboBoxNgayBatDau.SelectedIndex>=0)
            {
                DialogResult dl;
                dl =
                    MessageBox.Show(
                        "Sau khi thực hiện chức năng này bạn sẽ xoá toàn bộ thông tin xuất chiếu trong tuần !\r\nBạn có muốn thực hiện chức năng này không ?","Cảnh báo",
                        MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
                if(dl==DialogResult.Yes)
                {
                    LichChieuTuanControl lichChieuTuanControl = new LichChieuTuanControl();
                    lichChieuTuanControl.HuyLichChieuTuan(_LichTuanHienTai);
                    CapNhatDanhSachLichChieuTuan();
                    this.dataGridViewDanhSachPhim.Visible = false;
                    ClearManHinh();
                    MessageBox.Show("Huỷ lịch chiếu thành công !!!");
                }
            }
            else
            {
                MessageBox.Show("Chưa có lịch chiếu được gọn !!");
            }
        }
        public void ClearManHinh()
        {
            this.comboBoxNgayBatDau.Text = "";
            this.comboBoxDanhSachPhim.Text = "";
            this.comboBoxDanhSachRapChieu.Text = "";
            this.textBoxGiamGia.Text = "";
        }

        //Cập nhật xuất chiếu 
        private void buttonCapNhatXuatChieu_Click(object sender, EventArgs e)
        {
            if(this.dataGridViewDanhSachPhim.Visible==true)
            {
                if(this.dataGridViewDanhSachPhim.CurrentRow!=null)
                {
                    int index = this.dataGridViewDanhSachPhim.CurrentRow.Index;
                    if(index>=0)
                    {
                        //Cập nhật thông tin xuất chiếu.
                        XuatChieuDTO xuatChieuDto=new XuatChieuDTO();
                        LayThongTinXuatChieu(ref xuatChieuDto);
                        if(DieuKienTruocKhiThemXuatChieu(xuatChieuDto))
                        {
                            XuatChieuControl control = new XuatChieuControl();
                            xuatChieuDto.IdTuan = DsXuatChieu[index].IdTuan;
                            control.CapNhatXuatChieu(xuatChieuDto);
                            CapNhatDsXuatChieuTheoTuan(_LichTuanHienTai);
                            MessageBox.Show("Cập nhật thành công !");
                        }
                    }
                }
                else
                {
                    MessageBox.Show("Chưa có xuất chiếu được chọn !!!");
                }

            }
        }

        
        

    }
}
